package Thread;
//用懒汉模式实现单例模式
class SingletonLazy{
    private static Object lock = new Object();
    private static volatile SingletonLazy instance=null;
    private SingletonLazy(){

    }
    public static synchronized SingletonLazy getInstance(){
        if(instance==null){
            instance=new SingletonLazy(); //在第一次使用的时候创建实例
                                            //由于创建操作是非原子的，会出现线程安全问题，加锁是创建操作变为原子的
        }
        return instance;
    }
    public static SingletonLazy getInstance2(){
        if(instance==null){  //判定是否需要加锁
            synchronized(lock){ //引入加锁后，后续线程会在锁的位置阻塞，阻塞到前一个线程解锁，当后一个线程进入条件时，instance被修改，不再执行new
                if(instance==null){
                    instance=new SingletonLazy();
                }
            }
        }
        return instance;
    }
}
public class Demo28 {
}
